package com.grupobbva.iici.service.impl;

import java.io.File;
import java.util.Date;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.grupobbva.iici.dao.ProcesoDAO;
import com.grupobbva.iici.serializable.Bitacora;
import com.grupobbva.iici.serializable.Scheduler;
import com.grupobbva.iici.service.CorporativaService;
import com.grupobbva.iici.service.ProcesoService;
import com.grupobbva.iici.util.ConstantesUtil;
import com.grupobbva.iici.util.HiloEjecucionGenerarArchivo;

@Service("ProcesoService")
public class ProcesoServiceImpl  implements ProcesoService {

	private static final Logger log = Logger.getLogger(ProcesoServiceImpl.class);

	@Autowired
	private ProcesoDAO procesoDAO;

	@Autowired
	private CorporativaService corporativaService;

	private String rutaArchivosEntrada;

	public String getRuta(){
		if(rutaArchivosEntrada==null){
			rutaArchivosEntrada=corporativaService.obtenerPorCodigo(ConstantesUtil.CODIGO_RUTA_LOG_RENIEC).getValor1();
		}
		return rutaArchivosEntrada;
	}
	
	public void ejecutarProceso(){
		realizarCargaArchivoAutomatica();
	}

	public void realizarCargaArchivoAutomatica() {
		try {
			List<Scheduler> lstScheduler = procesoDAO.obtenerScheduler();
			if (lstScheduler != null) {
				for (Scheduler scheduler : lstScheduler) {
					File file=new File(getRuta()+scheduler.getNombreArchivo());
					boolean existe=file.exists();
					if(scheduler.getIdScheduler().equals(ConstantesUtil.SCHEDULER.CODIGO_ARCHIVO_RENIEC)){
						log.info("Inicia proceso para Generación de Archivo RENIEC");
						file.createNewFile();
						Thread hilo = new Thread(new HiloEjecucionGenerarArchivo(scheduler,"IICI",existe,file));
						hilo.start();
						log.info("Fin proceso para Generación de Archivo RENIEC");
					}
				}
			}
		} catch (Exception e) {
			log.error(e);
		}
	}

	public void realizarCargaArchivoManual(Bitacora bitacora) throws Exception {
		try {
			log.info("inicio realizarCargaArchivoManual");
			Scheduler schedulerDTO = new Scheduler();
			schedulerDTO.setIdScheduler(bitacora.getScheduler().getIdScheduler());
			if(bitacora.getFechaEjecutar()!=null&&!bitacora.getFechaEjecutar().equals("")){
				Date fechaIn=bitacora.getFechaEjecutar();
				Date fecha=new Date();
				fecha.setYear(fechaIn.getYear());
				fecha.setMonth(fechaIn.getMonth());
				fecha.setDate(fechaIn.getDate());
				schedulerDTO.setFechaProceso(fecha);
			}else{
				schedulerDTO.setFechaProceso(new Date());
			}
			schedulerDTO=procesoDAO.obtenerScheduler(schedulerDTO);
			if(schedulerDTO.getIdScheduler().equals(ConstantesUtil.SCHEDULER.CODIGO_ARCHIVO_RENIEC)){
				File file=new File(getRuta()+schedulerDTO.getNombreArchivo());
				boolean existe=file.exists();
				log.info("Inicia proceso para Generación de Archivo RENIEC");
				file.createNewFile();
				Thread hilo = new Thread(new HiloEjecucionGenerarArchivo(schedulerDTO, "IICI",existe,file));
				hilo.start();
				log.info("Fin proceso para Generación de Archivo RENIEC");
			}
			log.info("Fin  realizarCargaArchivoManual");
		} catch (Exception e) {
			throw e;
		}
	}

	
	public Scheduler obtenerScheduler(Scheduler schedulerDTO) throws Exception {
		return procesoDAO.obtenerScheduler(schedulerDTO);
	}


}
